home *** CD-ROM | disk | FTP | other *** search
/ Amiga News 95 / Amiga News 95.iso / dpat / dpat08 / lfman / lfman.c < prev    next >
Encoding:
C/C++ Source or Header  |  1993-02-08  |  4.5 KB  |  199 lines

  1. /* SOS */
  2. /***************************************************************************
  3.  
  4.                             LFman V1.1
  5.                           © LF soft 1992
  6.  
  7.     This utility is a ShareWare product of L.FAILLIE. All rights reserved.
  8.     If you like it, please send 50 FF or 10$ to
  9.  
  10.                                 L.FAILLIE
  11.                              " Les Vuardes "
  12.                              74930 Reignier
  13.                                  FRANCE
  14.  
  15.      LFman use PowerPacker.library & can speek french if you set the Lang
  16.     Env-variable to "Français". ( SetEnv Lang "Français" )
  17.  
  18.     -> LFman peut parler FRANCAIS en mettant la variable Lang a Français <-
  19.  
  20.     BUGS: The current PP.library (34.2) have a probleme with VD0:.
  21.     ppLoadData() always return a read-write error.
  22.  
  23.     Futurs releases :
  24.         - Support wilds cards,
  25.         - Support multi name - for CSH expand compatibility -
  26.  
  27.     History:
  28.    ----------
  29.         V1.0    29-May-92 : First release,
  30.         V1.1    20-Jun-92 : Move extention for english help from ".HLP"
  31.                             to ".MAN".
  32. ***************************************************************************/
  33.  
  34.  
  35. #define U_PP /* use powerpacker.library */
  36. #include <LF.h>
  37. #include <string.h>
  38. #include <exec/memory.h>
  39. #include <stdlib.h>
  40.  
  41. volatile UBYTE *buffer,
  42.     lang=0;     /* English by default */
  43. volatile ULONG len,i,err;
  44. volatile char com[32]; /* "Doc:" + 22 for basename + 5 for ext */
  45. volatile char cm[23];  /* commande */
  46. volatile char *var;  /* Ptr on var */
  47.  
  48. volatile const char  *cof_err[]={"Can't open file","Erreur d'ouverture"},
  49.             *err_LFman_envvar[]={"Can't find LFman variable","Variable LFman pas trouvée"},
  50.             *no_hlp[]={"No help found","Pas d'aide trouvée"};
  51.  
  52. #ifdef DEBUG
  53.     #define DOC_DIR "ram:"
  54. #else
  55.     #define DOC_DIR "Doc:"
  56. #endif
  57.  
  58. void error(char *msg){
  59.     printf("\033[33m%s\n\033[0m",msg);
  60. }
  61.  
  62. void freebuff(){
  63.     if(len)
  64.         FreeMem (buffer, len);
  65.     len=0;
  66. }
  67.  
  68. void salut(){
  69.     freebuff();
  70.     ClosePP();
  71. }
  72.  
  73. void fcust(){
  74.     if(err=ppLoadData(com,2,MEMF_PUBLIC,&buffer,&len,NULL))
  75.         printf("\033[33m%s : %d\n\033[0m",cof_err[lang],err);
  76.     else {
  77.         #ifdef DEBUG
  78.         printf("Len = %d\n",len);
  79.         #endif
  80.         for(i=0;i<len;i++)
  81.             putchar(*(buffer+i));
  82.         freebuff();
  83.     }
  84.     exit(0);
  85. }
  86.  
  87. char sch() /* Search cm commande on com general doc file */
  88. {
  89.     register char *x,*lmt,fnd=0;
  90.  
  91.     if(!exist(com)) return(0);
  92.     if(err=ppLoadData(com,2,MEMF_PUBLIC,&buffer,&len,NULL)){
  93.         printf("\033[33m%s (%s): %d\n\033[0m",cof_err[lang],com,err);
  94.         return(0);
  95.     }
  96.     lmt=buffer+len;x=buffer;
  97.  
  98.     sprintf(com,"\n##%s",cm);
  99.     i=strlen(com);
  100.  
  101.     #ifdef DEBUG
  102.         printf("buff=%x,len= %d\n",buffer,len);
  103.     #endif
  104.  
  105.     do{
  106.         if(!strnicmp(x,com,i)){
  107.             fnd=1;x+=3;
  108.             while(x<lmt)
  109.                 if(strncmp(x,"\n##",3))
  110.                     putchar(*x++);
  111.                 else {
  112.                     puts("");
  113.                     break;
  114.                 }
  115.         }
  116.     } while(++x<lmt);
  117.  
  118.     freebuff();
  119.     if(fnd)
  120.         return(1);
  121.     else
  122.         return(0);
  123. }
  124.  
  125. void main(int ac,char **av){
  126.     OpenPP(); /* open PowerPacker.library */
  127.  
  128.     atexit(salut);
  129.  
  130.     if(var=getenv("Lang")){
  131.         if(!stricmp(var,"Français"))
  132.             lang=1;
  133.     }
  134.  
  135.     if(ac==1) /* No arg */
  136.         strcpy(cm,"LFman");
  137.     else
  138.         if(!strcmp(av[1],"?"))
  139.             strcpy(cm,"LFman");
  140.         else{
  141.             strncpy(cm,av[1],22);
  142.             cm[22]=0;
  143.         }
  144.  
  145.     switch(lang) {  /* Set ext */
  146.     case 1: /* Français */
  147.         strcpy(com,".aide");
  148.         break;
  149.     default :
  150.         strcpy(com,".man");
  151.     }
  152.  
  153.     strins(com,cm);
  154.     strins(com,DOC_DIR);
  155. #ifdef DEBUG
  156.     puts(com);
  157. #endif
  158.     if(exist(com))
  159.         fcust();
  160.  
  161.     if(lang){ /* For english default doc */
  162.         strcpy(com,".man");
  163.         strins(com,cm);
  164.         strins(com,DOC_DIR);
  165.         #ifdef DEBUG
  166.         puts(com);
  167.         #endif
  168.         if(exist(com))
  169.             fcust();
  170.     }
  171.  
  172.         /* Now search on generals docs */
  173.     if(!(var=getenv("LFman"))){
  174.         error(err_LFman_envvar[lang]);
  175.         exit(0);
  176.     }
  177.  
  178.     FOREVER{
  179.         char *cpt;
  180.         strncpy(com,var,28);
  181.         com[28]=0;
  182.         strins(com,DOC_DIR);
  183.         if(cpt=strchr(com,';'))
  184.             *cpt=0;
  185.         #ifdef DEBUG
  186.             puts(com);
  187.         #endif
  188.         if(sch())       /* find help on curent file */
  189.             exit(0);
  190.         if(!(var=strchr(var,';')))
  191.             break;
  192.  
  193.         var++;
  194.     }
  195.     error(no_hlp[lang]);
  196.     exit(0);
  197. }
  198. /* END */
  199.